1 Exponential Random Graph Models

The previous models we have used served a purpose, but are limited - these approaches are analogous to building models by fitting distributions.

We now move on to more sophisticated statistical models - Exponential Random Graph Models (ERGMs) in particular. Other approaches exist, such as stochastic block models and latent network models, but we will not have much time to discuss these.

Suppose we have a graph \(G = (V, E)\) - let \(Y\) be the adjacency matrix for this graph and \(y\) is a particular realisation of this graph.

\[ P(Y = y) = \frac{1}{\kappa} \, \exp \left( \sum_H \theta_H g_H(y) \right) \]

where

In simpler terms, we fit the network based on counts of characteristics of the graph such as edges, triangles, stars and anything else we can think of.

1.1 Network Characteristics

We build our first model from edges - we assume only the presence of edges between nodes is relevant for the creation of the graph.

The function summary.statistics counts the various configurations in the network.

summary.statistics(lazega_network ~ edges)
## edges 
##   115

We now extend this model to see other configuration types including k-stars and so on.

summary.statistics(lazega_network ~ edges + kstar(2) + kstar(3) + triangle)
##    edges   kstar2   kstar3 triangle 
##      115      926     2681      120

In practice, adding \(k\)-stars directly as characteristics of networks results in poor fits so we instead have an alternative formulation that allows us to fit for all orders of star effects simultaneously. The ones we discuss are all parameterised allowing control over how the characteristics affect the value.

1.1.1 Alternating k-Star Statistic altkstar

\[ \text{AKS}_{\lambda}(y) = \sum_{k=2}^{N_v-1} (-1)^k \frac{S_k(y)}{\lambda^{k-2}} \] where \(S_k(y)\) is the number of \(k\)-stars in the graph.

1.1.2 Geometrically-Weighted Degree Count gwdegree

\[ \text{GWD}_{\gamma}(y) = \sum_{d=0}^{N_v-1} e^{-\gamma d} \, N_d(y) \]

where \(N_d(y)\) is the number of vertices of degree \(d\).

1.1.3 Alternating k-Triangles gwesp

\[ \text{AKT}_{\lambda}(y) = 3T_1 + \sum_{k=2}^{N_v-2} (-1)^{k+1} \frac{T_k(y)}{\lambda^{k-1}} \]

where \(T_k\) is the number of \(k\)-triangles, the set of \(k\) individual triangles sharing a common base.

In our models we use the AKT quantity to match the textbook, but any can be used.

summary.statistics(lazega_network ~ edges + gwesp(1, fixed = TRUE))
##         edges gwesp.fixed.1 
##       115.000       213.175
summary.statistics(lazega_network ~ edges + triangles + gwdegree(1, fixed = TRUE))
##    edges triangle gwdegree 
##    115.0    120.0     79.2

1.2 Attribute Characteristics

So far we have kept our focus on purely topographic properties of the networks, ignoring the attributes of the edges or vertices.

It is natural to expect that the existence or not of an edge between two vertices to also depend on the attributes of those vertices. We can incorporate them into our ERGMs as additional terms.

Vertex attributes can influence a graph in two ways: a value on a vertex may influence the probability of an edge being connected (analogous to a ‘main’ effect in standard modelling), and the values on both vertices may influence the probability (analogous to ‘interactions’ or ‘second-order effects’).

These predictors are added to a formula via the nodemain and match terms.

summary.statistics(lazega_network ~ edges + triangles + gwdegree(1, fixed = TRUE) +
    nodemain('Practice') + match('Office'))
##            edges         triangle         gwdegree nodecov.Practice 
##            115.0            120.0             79.2            359.0 
## nodematch.Office 
##             85.0

2 Fitting ERGMs

To fit these models, we use an MCMC algorithm to calculate the MLE for the model. The ergm() function performs this optimisation.

2.1 Node Geometry

We start fitting the model with some simple geometries as predictors.

lazega_01_ergm <- ergm(lazega_network ~ edges + triangles + gwesp(1)
   ,control = control.ergm(seed = 42)
)

run_ergm <- function() simulate.ergm(lazega_01_ergm) %>% intergraph::asIgraph()

lazega_01_lst <- run_network_model_assessment(lazega_igraph, run_ergm, n_iter = 1000)

plot(lazega_01_lst$assess_plot)

summary(lazega_01_ergm)
## 
## ==========================
## Summary of model fit
## ==========================
## 
## Formula:   lazega_network ~ edges + triangles + gwesp(1)
## 
## Iterations:  2 out of 20 
## 
## Monte Carlo MLE Results:
##             Estimate Std. Error MCMC % p-value    
## edges         -3.707      0.388      0  <1e-04 ***
## triangle      -0.179      0.631      0   0.777    
## gwesp          0.998      0.391      0   0.011 *  
## gwesp.decay    0.954      0.221      0  <1e-04 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##      Null Deviance: 873  on 630  degrees of freedom
##  Residual Deviance: 553  on 626  degrees of freedom
##  
## AIC: 561    BIC: 578    (Smaller is better.)

We have simulated new graphs from this model using simulate.ergm() so we will produce one and then plot the two beside each other.

plot_1 <- ggplot(lazega_igraph, aes(x = x, y = y, xend = xend, yend = yend)) +
    geom_edges() +
    geom_label(aes(label = vertex.names), size = 5) +
    theme_blank()

plot_2 <- ggplot(simulate.ergm(lazega_01_ergm), aes(x = x, y = y, xend = xend, yend = yend)) +
    geom_edges() +
    geom_label(aes(label = vertex.names), size = 5) +
    theme_blank()


plot_grid(plot_1, plot_2, ncol = 2)

We will have a look at the degree distribution of the original network and the simulated ERGM from it.

lazega_degdist <- lazega_igraph %>%
    igraph::degree()

lazega_01_degdist <- simulate.ergm(lazega_01_ergm) %>%
    intergraph::asIgraph() %>%
    igraph::degree()

plot_1 <- ggplot() +
    geom_histogram(aes(x = lazega_degdist), binwidth = 1) +
    xlab("Degree") +
    ylab("Count") +
    ggtitle("Original Network")

plot_2 <- ggplot() +
    geom_histogram(aes(x = lazega_01_degdist), binwidth = 1) +
    xlab("Degree") +
    ylab("Count") +
    ggtitle("ERGM Simulation")

plot_grid(plot_1, plot_2, ncol = 2)

2.2 Vertex Attributes

We now want to see the model running with vertex attributes as part of the model.

lazega_02_ergm <- ergm(lazega_network ~ edges + triangles +
    gwesp(1) + nodefactor('Practice') +
    nodemain('Seniority') + nodematch('Gender') + match('Office')
   ,control = control.ergm(seed = 42)
)


run_02_ergm <- function() simulate.ergm(lazega_02_ergm) %>% intergraph::asIgraph()

lazega_02_lst <- run_network_model_assessment(lazega_igraph, run_02_ergm, n_iter = 1000)

plot(lazega_02_lst$assess_plot)

summary(lazega_02_ergm)
## 
## ==========================
## Summary of model fit
## ==========================
## 
## Formula:   lazega_network ~ edges + triangles + gwesp(1) + nodefactor("Practice") + 
##     nodemain("Seniority") + nodematch("Gender") + match("Office")
## 
## Iterations:  2 out of 20 
## 
## Monte Carlo MLE Results:
##                       Estimate Std. Error MCMC % p-value    
## edges                 -5.92247    0.61134      0 < 1e-04 ***
## triangle              -0.11754    0.62743      0 0.85145    
## gwesp                  0.86708    0.39163      0 0.02719 *  
## gwesp.decay            0.92775    0.27628      0 0.00083 ***
## nodefactor.Practice.2  0.43843    0.12998      0 0.00079 ***
## nodecov.Seniority      0.02201    0.00635      0 0.00056 ***
## nodematch.Gender       0.65303    0.23721      0 0.00608 ** 
## nodematch.Office       1.06486    0.18450      0 < 1e-04 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##      Null Deviance: 873  on 630  degrees of freedom
##  Residual Deviance: 479  on 622  degrees of freedom
##  
## AIC: 495    BIC: 530    (Smaller is better.)
lazega_degdist <- lazega_igraph %>%
    igraph::degree()

lazega_02_degdist <- simulate.ergm(lazega_02_ergm) %>%
    intergraph::asIgraph() %>%
    igraph::degree()

plot_1 <- ggplot() +
    geom_histogram(aes(x = lazega_degdist), binwidth = 1) +
    xlab("Degree") +
    ylab("Count") +
    ggtitle("Lazega")

plot_2 <- ggplot() +
    geom_histogram(aes(x = lazega_01_degdist), binwidth = 1) +
    xlab("Degree") +
    ylab("Count") +
    ggtitle("Model 01")

plot_3 <- ggplot() +
    geom_histogram(aes(x = lazega_02_degdist), binwidth = 1) +
    xlab("Degree") +
    ylab("Count") +
    ggtitle("Model 02")

plot_grid(plot_1, plot_2, plot_3, ncol = 3)

3 High-School Network

The faux.dixon.high dataset is a simulated dataset modelled from high-school friendships. The network is directed, but we fit an undirected version in this workshop.

data(faux.dixon.high)

dixon_igraph <- faux.dixon.high %>%
    asIgraph() %>%
    as.undirected() %>%
    simplify()

dixon_network <- dixon_igraph %>%
    asNetwork()


dixon_plot <- ggplot(ggnetwork(dixon_igraph, layout = 'fruchtermanreingold')
                    ,aes(x = x, y = y, xend = xend, yend = yend)) +
    geom_edges(alpha = 0.1) +
    geom_nodes(aes(colour = race), size = 3) +
    ggtitle('The Dixon High-school Network') +
    theme_blank()

dixon_plot %>% plot()

3.1 Random Graphs Models

Before we try the ERGMs, we will use a few basic random graph models first. Models such as these are not able to capture aspects like assortativity, but it may be able to generate the topology at least.

3.1.1 Dixon G(n,m) Model

We start fitting a \(G(n,m)\) model, and see how effective we are at capturing structure in the model.

dixon_count_node <- gorder(dixon_igraph)
dixon_count_edge <- gsize (dixon_igraph)

run_gnm <- function() sample_gnm(n = dixon_count_node, dixon_count_edge)

dixon_gnm_lst <- run_network_model_assessment(dixon_igraph, run_gnm, n_iter = 1000)

plot(dixon_gnm_lst$assess_plot)

This model cannot account for the network structure at all.

3.1.2 Dixon Degree-Distribution Model

We try fitting the degree distribution.

dixon_degdist <- dixon_igraph %>% igraph::degree()

run_degdist <- function() sample_degseq(dixon_degdist) %>% simplify()

dixon_degdist_lst <- run_network_model_assessment(dixon_igraph, run_degdist, n_iter = 1000)

plot(dixon_degdist_lst$assess_plot)

This model captures the connectedness of the Dixon network in terms of clusters and components, but the transitivity and avaerage path length is much lower than observed.

3.1.3 Dixon Preferential-Attachment Model

Before moving on to ERGMs, we try a PA model.

dixon_node_count <- dixon_igraph %>% vcount()

run_pa <- function() sample_pa(dixon_node_count, power = 1, m = 1, directed = FALSE) %>%
                        simplify()

dixon_pa_lst <- run_network_model_assessment(dixon_igraph, run_pa, n_iter = 1000)

plot(dixon_pa_lst$assess_plot)

3.2 Dixon ERGMs

3.2.1 Edges-only ERGM

We now move on to fitting ERGMs with this data, and we start with just basic geometries such as edges and \(k\)-cores. Our first model fits on edges only.

dixon_model_01_ergm <- ergm(dixon_network ~ edges
   ,control = control.ergm(seed = 421)
)


run_01_ergm <- function() simulate.ergm(dixon_model_01_ergm) %>% intergraph::asIgraph()

dixon_01_lst <- run_network_model_assessment(dixon_igraph, run_01_ergm, n_iter = 1000)

plot(dixon_01_lst$assess_plot)

summary(dixon_model_01_ergm)
## 
## ==========================
## Summary of model fit
## ==========================
## 
## Formula:   dixon_network ~ edges
## 
## Iterations:  6 out of 20 
## 
## Monte Carlo MLE Results:
##       Estimate Std. Error MCMC % p-value    
## edges  -3.4117     0.0325      0  <1e-04 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##      Null Deviance: 42459  on 30628  degrees of freedom
##  Residual Deviance:  8661  on 30627  degrees of freedom
##  
## AIC: 8663    BIC: 8672    (Smaller is better.)

3.2.2 Adding More Geometries

Having tried to the edges as a predictor to the model, we now look to add additional geometries.

We start by adding triangles to the model, and checking the diagnostics.

dixon_triangle_ergm <- ergm(dixon_network ~ edges + triangles
   ,control = control.ergm(seed = 420, MCMLE.maxit = 2)
)

mcmc.diagnostics(dixon_triangle_ergm)
## Sample statistics summary:
## 
## Iterations = 16384:1063936
## Thinning interval = 1024 
## Number of chains = 1 
## Sample size per chain = 1024 
## 
## 1. Empirical mean and standard deviation for each variable,
##    plus standard error of the mean:
## 
##          Mean   SD Naive SE Time-series SE
## edges    -498 29.1    0.909           2.45
## triangle -583 11.5    0.360           1.12
## 
## 2. Quantiles for each variable:
## 
##          2.5%  25%  50%  75% 97.5%
## edges    -552 -518 -499 -478  -439
## triangle -602 -591 -584 -577  -557
## 
## 
## Sample statistics cross-correlations:
##             edges triangle
## edges    1.000000 0.730362
## triangle 0.730362 1.000000
## 
## Sample statistics auto-correlation:
## Chain 1 
##             edges triangle
## Lag 0    1.000000 1.000000
## Lag 1024 0.647485 0.810961
## Lag 2048 0.460276 0.664464
## Lag 3072 0.342892 0.546879
## Lag 4096 0.275466 0.455498
## Lag 5120 0.224622 0.389159
## 
## Sample statistics burn-in diagnostic (Geweke):
## Chain 1 
## 
## Fraction in 1st window = 0.1
## Fraction in 2nd window = 0.5 
## 
##    edges triangle 
##   -3.395   -3.266 
## 
## Individual P-values (lower = worse):
##       edges    triangle 
## 0.000685991 0.001090031 
## Joint P-value (lower = worse):  0.0552124 .

## 
## MCMC diagnostics shown here are from the last round of simulation, prior to computation of final parameter estimates. Because the final estimates are refinements of those used for this simulation run, these diagnostics may understate model performance. To directly assess the performance of the final model on in-model statistics, please use the GOF command: gof(ergmFitObject, GOF=~model).
# first_dixon_model_02_ergm <- quietly(ergm)(dixon_network ~ edges + gwesp(1.0, fixed=TRUE)
#    ,control = control.ergm(seed = 422)
# )

dixon_model_02_ergm <- ergm(dixon_network ~ edges + gwesp(0.1, fixed=TRUE)
   ,control = control.ergm(seed = 422)
)

mcmc.diagnostics(dixon_model_02_ergm)
## Sample statistics summary:
## 
## Iterations = 16384:4209664
## Thinning interval = 1024 
## Number of chains = 1 
## Sample size per chain = 4096 
## 
## 1. Empirical mean and standard deviation for each variable,
##    plus standard error of the mean:
## 
##                     Mean   SD Naive SE Time-series SE
## edges           -1.26587 67.3     1.05           8.12
## gwesp.fixed.0.1 -0.00122 75.7     1.18           8.78
## 
## 2. Quantiles for each variable:
## 
##                 2.5%   25%    50%  75% 97.5%
## edges           -122 -49.0 -1.000 39.0   143
## gwesp.fixed.0.1 -137 -55.4 -0.801 46.8   160
## 
## 
## Sample statistics cross-correlations:
##                    edges gwesp.fixed.0.1
## edges           1.000000        0.981883
## gwesp.fixed.0.1 0.981883        1.000000
## 
## Sample statistics auto-correlation:
## Chain 1 
##             edges gwesp.fixed.0.1
## Lag 0    1.000000        1.000000
## Lag 1024 0.959921        0.956276
## Lag 2048 0.924153        0.918658
## Lag 3072 0.892304        0.884910
## Lag 4096 0.863711        0.854246
## Lag 5120 0.836224        0.826117
## 
## Sample statistics burn-in diagnostic (Geweke):
## Chain 1 
## 
## Fraction in 1st window = 0.1
## Fraction in 2nd window = 0.5 
## 
##           edges gwesp.fixed.0.1 
##           1.838           1.905 
## 
## Individual P-values (lower = worse):
##           edges gwesp.fixed.0.1 
##       0.0660703       0.0567192 
## Joint P-value (lower = worse):  0.194027 .

## 
## MCMC diagnostics shown here are from the last round of simulation, prior to computation of final parameter estimates. Because the final estimates are refinements of those used for this simulation run, these diagnostics may understate model performance. To directly assess the performance of the final model on in-model statistics, please use the GOF command: gof(ergmFitObject, GOF=~model).
run_02_ergm <- function() simulate.ergm(dixon_model_02_ergm) %>% intergraph::asIgraph()

dixon_02_lst <- run_network_model_assessment(dixon_igraph, run_02_ergm, n_iter = 1000)

plot(dixon_02_lst$assess_plot)

summary(dixon_model_02_ergm)
## 
## ==========================
## Summary of model fit
## ==========================
## 
## Formula:   dixon_network ~ edges + gwesp(0.1, fixed = TRUE)
## 
## Iterations:  6 out of 20 
## 
## Monte Carlo MLE Results:
##                 Estimate Std. Error MCMC % p-value    
## edges            -4.9113     0.0785      0  <1e-04 ***
## gwesp.fixed.0.1   1.4933     0.0698      0  <1e-04 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##      Null Deviance: 42459  on 30628  degrees of freedom
##  Residual Deviance:  7893  on 30626  degrees of freedom
##  
## AIC: 7897    BIC: 7914    (Smaller is better.)

3.2.3 Adding Vertex Attributes

model_03_formula <- formula(
    dixon_network ~ edges + gwesp(0.1, fixed=TRUE) + absdiff('grade') +
        nodefactor('race') + nodefactor('grade') + nodefactor('sex')
)

dixon_model_03_ergm <- ergm(model_03_formula, control = control.ergm(seed = 423))

mcmc.diagnostics(dixon_model_03_ergm)
## Sample statistics summary:
## 
## Iterations = 16384:4209664
## Thinning interval = 1024 
## Number of chains = 1 
## Sample size per chain = 4096 
## 
## 1. Empirical mean and standard deviation for each variable,
##    plus standard error of the mean:
## 
##                       Mean   SD Naive SE Time-series SE
## edges                9.004 45.7    0.714           3.96
## gwesp.fixed.0.1     10.646 53.7    0.839           4.86
## absdiff.grade        8.951 41.5    0.648           2.46
## nodefactor.race.H   -2.681 13.6    0.212           1.02
## nodefactor.race.O    2.895 13.5    0.210           1.10
## nodefactor.race.W   14.114 56.2    0.879           4.64
## nodefactor.grade.8   2.935 41.2    0.643           4.23
## nodefactor.grade.9  -1.024 37.8    0.590           3.60
## nodefactor.grade.10 -3.700 36.7    0.573           3.25
## nodefactor.grade.11 16.363 25.0    0.391           2.16
## nodefactor.grade.12 -0.913 24.5    0.382           2.30
## nodefactor.sex.2    15.674 57.8    0.903           5.14
## 
## 2. Quantiles for each variable:
## 
##                      2.5%   25% 50%  75% 97.5%
## edges               -80.0 -23.0   9 40.0  98.0
## gwesp.fixed.0.1     -92.1 -26.6  11 45.7 118.2
## absdiff.grade       -70.0 -20.0   8 37.0  90.6
## nodefactor.race.H   -28.0 -12.0  -3  6.0  25.0
## nodefactor.race.O   -23.0  -6.0   2 11.0  31.6
## nodefactor.race.W   -92.0 -25.0  12 52.0 127.0
## nodefactor.grade.8  -70.6 -27.0   1 32.0  86.0
## nodefactor.grade.9  -74.0 -26.0  -2 24.0  74.0
## nodefactor.grade.10 -77.0 -27.0  -4 20.0  71.0
## nodefactor.grade.11 -29.0  -2.0  15 34.0  65.0
## nodefactor.grade.12 -45.0 -18.0  -2 15.0  49.0
## nodefactor.sex.2    -93.0 -25.0  14 54.0 131.6
## 
## 
## Sample statistics cross-correlations:
##                        edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## edges               1.000000        0.960944      0.718859        0.32520777
## gwesp.fixed.0.1     0.960944        1.000000      0.638984        0.31424450
## absdiff.grade       0.718859        0.638984      1.000000        0.17504062
## nodefactor.race.H   0.325208        0.314244      0.175041        1.00000000
## nodefactor.race.O   0.392861        0.374861      0.302275        0.10928088
## nodefactor.race.W   0.875854        0.849257      0.654493        0.15743025
## nodefactor.grade.8  0.606428        0.594195      0.385047        0.25507952
## nodefactor.grade.9  0.595994        0.600655      0.419499        0.16301193
## nodefactor.grade.10 0.611895        0.595119      0.414367        0.27901049
## nodefactor.grade.11 0.290343        0.239957      0.308103       -0.00536791
## nodefactor.grade.12 0.271393        0.258145      0.155987        0.02783963
## nodefactor.sex.2    0.871985        0.848305      0.624619        0.26376704
##                     nodefactor.race.O nodefactor.race.W nodefactor.grade.8
## edges                       0.3928608          0.875854          0.6064281
## gwesp.fixed.0.1             0.3748609          0.849257          0.5941947
## absdiff.grade               0.3022748          0.654493          0.3850472
## nodefactor.race.H           0.1092809          0.157430          0.2550795
## nodefactor.race.O           1.0000000          0.203026          0.4294083
## nodefactor.race.W           0.2030256          1.000000          0.4535147
## nodefactor.grade.8          0.4294083          0.453515          1.0000000
## nodefactor.grade.9          0.1232242          0.571006          0.1782107
## nodefactor.grade.10         0.1253074          0.546841          0.1368225
## nodefactor.grade.11        -0.0436119          0.330747         -0.1189735
## nodefactor.grade.12         0.0898716          0.209146          0.0162538
## nodefactor.sex.2            0.3522302          0.743745          0.5267245
##                     nodefactor.grade.9 nodefactor.grade.10 nodefactor.grade.11
## edges                        0.5959941           0.6118953          0.29034336
## gwesp.fixed.0.1              0.6006554           0.5951187          0.23995712
## absdiff.grade                0.4194992           0.4143666          0.30810256
## nodefactor.race.H            0.1630119           0.2790105         -0.00536791
## nodefactor.race.O            0.1232242           0.1253074         -0.04361187
## nodefactor.race.W            0.5710061           0.5468410          0.33074733
## nodefactor.grade.8           0.1782107           0.1368225         -0.11897346
## nodefactor.grade.9           1.0000000           0.2292822          0.06361923
## nodefactor.grade.10          0.2292822           1.0000000          0.05203668
## nodefactor.grade.11          0.0636192           0.0520367          1.00000000
## nodefactor.grade.12         -0.1079798           0.0577180          0.07945564
## nodefactor.sex.2             0.4920213           0.5424618          0.21567603
##                     nodefactor.grade.12 nodefactor.sex.2
## edges                         0.2713929         0.871985
## gwesp.fixed.0.1               0.2581449         0.848305
## absdiff.grade                 0.1559872         0.624619
## nodefactor.race.H             0.0278396         0.263767
## nodefactor.race.O             0.0898716         0.352230
## nodefactor.race.W             0.2091458         0.743745
## nodefactor.grade.8            0.0162538         0.526725
## nodefactor.grade.9           -0.1079798         0.492021
## nodefactor.grade.10           0.0577180         0.542462
## nodefactor.grade.11           0.0794556         0.215676
## nodefactor.grade.12           1.0000000         0.307361
## nodefactor.sex.2              0.3073605         1.000000
## 
## Sample statistics auto-correlation:
## Chain 1 
##             edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## Lag 0    1.000000        1.000000      1.000000          1.000000
## Lag 1024 0.919471        0.919852      0.830308          0.907229
## Lag 2048 0.854082        0.857425      0.710997          0.834093
## Lag 3072 0.798316        0.805412      0.615130          0.768943
## Lag 4096 0.751077        0.762621      0.546660          0.710521
## Lag 5120 0.707507        0.720018      0.486869          0.658489
##          nodefactor.race.O nodefactor.race.W nodefactor.grade.8
## Lag 0             1.000000          1.000000           1.000000
## Lag 1024          0.906189          0.909257           0.933649
## Lag 2048          0.830684          0.834828           0.877253
## Lag 3072          0.765614          0.772796           0.827389
## Lag 4096          0.713073          0.724210           0.783201
## Lag 5120          0.667379          0.675909           0.742243
##          nodefactor.grade.9 nodefactor.grade.10 nodefactor.grade.11
## Lag 0              1.000000            1.000000            1.000000
## Lag 1024           0.922390            0.922912            0.916117
## Lag 2048           0.854493            0.862401            0.852947
## Lag 3072           0.794801            0.809312            0.797467
## Lag 4096           0.742727            0.762522            0.749667
## Lag 5120           0.693738            0.716927            0.706617
##          nodefactor.grade.12 nodefactor.sex.2
## Lag 0               1.000000         1.000000
## Lag 1024            0.924909         0.921541
## Lag 2048            0.866133         0.858813
## Lag 3072            0.814533         0.807129
## Lag 4096            0.769087         0.761614
## Lag 5120            0.731710         0.719138
## 
## Sample statistics burn-in diagnostic (Geweke):
## Chain 1 
## 
## Fraction in 1st window = 0.1
## Fraction in 2nd window = 0.5 
## 
##               edges     gwesp.fixed.0.1       absdiff.grade   nodefactor.race.H 
##              0.8702              0.9274              0.1798              1.4581 
##   nodefactor.race.O   nodefactor.race.W  nodefactor.grade.8  nodefactor.grade.9 
##              2.2720              0.5587              2.5165             -0.1650 
## nodefactor.grade.10 nodefactor.grade.11 nodefactor.grade.12    nodefactor.sex.2 
##              1.6501             -2.1491             -0.5760              1.0068 
## 
## Individual P-values (lower = worse):
##               edges     gwesp.fixed.0.1       absdiff.grade   nodefactor.race.H 
##           0.3841892           0.3537088           0.8573428           0.1447996 
##   nodefactor.race.O   nodefactor.race.W  nodefactor.grade.8  nodefactor.grade.9 
##           0.0230869           0.5763705           0.0118536           0.8689414 
## nodefactor.grade.10 nodefactor.grade.11 nodefactor.grade.12    nodefactor.sex.2 
##           0.0989266           0.0316258           0.5646153           0.3140105 
## Joint P-value (lower = worse):  0.144039 .

## 
## MCMC diagnostics shown here are from the last round of simulation, prior to computation of final parameter estimates. Because the final estimates are refinements of those used for this simulation run, these diagnostics may understate model performance. To directly assess the performance of the final model on in-model statistics, please use the GOF command: gof(ergmFitObject, GOF=~model).
run_03_ergm <- function() simulate.ergm(dixon_model_03_ergm) %>% intergraph::asIgraph()

dixon_03_lst <- run_network_model_assessment(dixon_igraph, run_03_ergm, n_iter = 1000)

plot(dixon_03_lst$assess_plot)

summary(dixon_model_03_ergm)
## 
## ==========================
## Summary of model fit
## ==========================
## 
## Formula:   dixon_network ~ edges + gwesp(0.1, fixed = TRUE) + absdiff("grade") + 
##     nodefactor("race") + nodefactor("grade") + nodefactor("sex")
## 
## Iterations:  5 out of 20 
## 
## Monte Carlo MLE Results:
##                     Estimate Std. Error MCMC % p-value    
## edges                -4.3052     0.1626      0 < 1e-04 ***
## gwesp.fixed.0.1       1.1914     0.0720      0 < 1e-04 ***
## absdiff.grade        -0.7981     0.0370      0 < 1e-04 ***
## nodefactor.race.H     0.0140     0.0833      0 0.86635    
## nodefactor.race.O     0.2003     0.0936      0 0.03248 *  
## nodefactor.race.W     0.1439     0.0419      0 0.00060 ***
## nodefactor.grade.8    0.2468     0.0727      0 0.00069 ***
## nodefactor.grade.9    0.2543     0.0705      0 0.00031 ***
## nodefactor.grade.10   0.1786     0.0715      0 0.01252 *  
## nodefactor.grade.11   0.0944     0.0762      0 0.21519    
## nodefactor.grade.12   0.3210     0.0747      0 < 1e-04 ***
## nodefactor.sex.2      0.0553     0.0363      0 0.12776    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##      Null Deviance: 42459  on 30628  degrees of freedom
##  Residual Deviance:  7063  on 30616  degrees of freedom
##  
## AIC: 7087    BIC: 7187    (Smaller is better.)

3.2.4 Adding Assortativity Features

model_04_formula <- formula(
    dixon_network ~ edges + gwesp(0.1, fixed=TRUE) + absdiff('grade') +
        nodefactor('race') + nodefactor('grade') + nodefactor('sex') +
        nodematch('grade', diff=TRUE) + nodematch('sex', diff=FALSE) +
        nodematch('race', diff=TRUE) + degree(0:3)
)

dixon_model_04_ergm <- ergm(model_04_formula, control = control.ergm(seed = 423))

mcmc.diagnostics(dixon_model_04_ergm)
## Sample statistics summary:
## 
## Iterations = 16384:4209664
## Thinning interval = 1024 
## Number of chains = 1 
## Sample size per chain = 4096 
## 
## 1. Empirical mean and standard deviation for each variable,
##    plus standard error of the mean:
## 
##                         Mean    SD Naive SE Time-series SE
## edges                31.1182 68.95   1.0774          9.755
## gwesp.fixed.0.1      34.1117 75.14   1.1741         11.849
## absdiff.grade        26.2737 62.66   0.9790          7.535
## nodefactor.race.H     3.8582 12.81   0.2002          1.095
## nodefactor.race.O    10.1260 17.63   0.2754          2.344
## nodefactor.race.W    68.0791 91.04   1.4225         14.257
## nodefactor.grade.8    5.1726 39.76   0.6213          3.617
## nodefactor.grade.9   12.6731 34.87   0.5448          2.983
## nodefactor.grade.10 -10.6489 43.69   0.6826          5.651
## nodefactor.grade.11   5.4226 40.69   0.6358          6.464
## nodefactor.grade.12  32.1040 38.67   0.6042          7.466
## nodefactor.sex.2     23.7878 74.95   1.1711          9.922
## nodematch.grade.7     6.3684 17.60   0.2750          4.220
## nodematch.grade.8     0.0808 16.79   0.2623          1.744
## nodematch.grade.9     2.1370 11.91   0.1861          1.059
## nodematch.grade.10   -6.2522 17.63   0.2754          2.151
## nodematch.grade.11    0.6904 12.32   0.1926          2.079
## nodematch.grade.12   12.4102 14.32   0.2238          2.596
## nodematch.sex        21.0940 42.72   0.6676          6.375
## nodematch.race.B    -10.5254 29.75   0.4648          4.092
## nodematch.race.O      1.0537  2.45   0.0382          0.232
## nodematch.race.W     28.4351 40.32   0.6300          5.944
## degree0              -0.8843  3.42   0.0534          0.400
## degree1              -1.9326  5.81   0.0907          0.872
## degree2              -0.5579  4.30   0.0671          0.499
## degree3              -0.3372  3.61   0.0564          0.227
## 
## 2. Quantiles for each variable:
## 
##                       2.5%   25%   50%   75%  97.5%
## edges                -93.0 -20.2  29.0  82.0 163.00
## gwesp.fixed.0.1     -103.6 -22.3  32.1  89.8 176.27
## absdiff.grade        -89.0 -18.0  25.0  69.0 151.62
## nodefactor.race.H    -22.0  -5.0   4.0  12.0  29.00
## nodefactor.race.O    -24.0  -2.0  10.0  23.0  44.00
## nodefactor.race.W   -103.6   3.0  68.0 133.0 247.00
## nodefactor.grade.8   -79.0 -20.0   8.0  33.0  76.62
## nodefactor.grade.9   -57.0  -9.0  13.0  35.0  84.62
## nodefactor.grade.10 -101.0 -40.0  -7.0  21.0  66.00
## nodefactor.grade.11  -71.0 -22.0   4.0  31.0  89.00
## nodefactor.grade.12  -39.6   5.0  30.0  61.0 105.00
## nodefactor.sex.2    -113.0 -29.0  19.0  76.0 177.00
## nodematch.grade.7    -21.0  -8.0   5.0  18.0  48.00
## nodematch.grade.8    -34.0 -11.0   1.0  12.0  30.00
## nodematch.grade.9    -21.0  -6.0   2.0  10.0  26.00
## nodematch.grade.10   -43.0 -18.0  -5.0   6.0  26.00
## nodematch.grade.11   -21.0  -7.0   0.0   8.0  28.00
## nodematch.grade.12   -14.0   2.0  12.0  23.0  40.00
## nodematch.sex        -55.0 -11.0  19.0  53.0 103.00
## nodematch.race.B     -67.0 -31.0 -10.0   9.0  52.00
## nodematch.race.O      -3.0  -1.0   1.0   2.0   6.62
## nodematch.race.W     -49.0   0.0  28.0  57.0 107.00
## degree0               -7.0  -3.0  -1.0   1.0   6.00
## degree1              -12.0  -6.0  -2.0   2.0  10.00
## degree2               -8.0  -4.0  -1.0   2.0   8.00
## degree3               -7.0  -3.0  -1.0   2.0   7.00
## 
## 
## Sample statistics cross-correlations:
##                         edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## edges                1.000000        0.977728     0.8285327         0.4252814
## gwesp.fixed.0.1      0.977728        1.000000     0.7829855         0.4217839
## absdiff.grade        0.828533        0.782985     1.0000000         0.2877039
## nodefactor.race.H    0.425281        0.421784     0.2877039         1.0000000
## nodefactor.race.O    0.490631        0.477951     0.2644637         0.3554472
## nodefactor.race.W    0.867849        0.861169     0.7437370         0.3192278
## nodefactor.grade.8   0.513453        0.534567     0.3082195         0.2839140
## nodefactor.grade.9   0.593029        0.596151     0.5879181         0.2550964
## nodefactor.grade.10  0.593873        0.582973     0.4150145         0.3514829
## nodefactor.grade.11  0.673370        0.640651     0.6616388         0.1514820
## nodefactor.grade.12  0.496690        0.464258     0.5414163         0.1039140
## nodefactor.sex.2     0.885914        0.871259     0.7584110         0.3877460
## nodematch.grade.7    0.510740        0.493341     0.2860773         0.2726473
## nodematch.grade.8    0.369180        0.403193     0.1060037         0.2344610
## nodematch.grade.9    0.229328        0.243972     0.1374088         0.1149511
## nodematch.grade.10   0.448122        0.449387     0.2132589         0.3192223
## nodematch.grade.11   0.595907        0.568995     0.5274709         0.1236229
## nodematch.grade.12   0.379323        0.355401     0.3440549         0.0855710
## nodematch.sex        0.929886        0.912600     0.7724067         0.4090441
## nodematch.race.B     0.606524        0.578297     0.5385467         0.0847929
## nodematch.race.O     0.201148        0.178678     0.0509717         0.1681029
## nodematch.race.W     0.804074        0.802431     0.7152945         0.2213394
## degree0             -0.569986       -0.505991    -0.4736191        -0.2184240
## degree1             -0.730830       -0.691448    -0.6004357        -0.2680109
## degree2             -0.555811       -0.538825    -0.4550036        -0.2078524
## degree3             -0.412280       -0.405276    -0.3261590        -0.1977782
##                     nodefactor.race.O nodefactor.race.W nodefactor.grade.8
## edges                       0.4906305          0.867849          0.5134531
## gwesp.fixed.0.1             0.4779506          0.861169          0.5345675
## absdiff.grade               0.2644637          0.743737          0.3082195
## nodefactor.race.H           0.3554472          0.319228          0.2839140
## nodefactor.race.O           1.0000000          0.411145          0.4269209
## nodefactor.race.W           0.4111446          1.000000          0.3971296
## nodefactor.grade.8          0.4269209          0.397130          1.0000000
## nodefactor.grade.9          0.1284439          0.545002          0.2012900
## nodefactor.grade.10         0.2699541          0.414582          0.1047373
## nodefactor.grade.11         0.1350910          0.652745          0.1321555
## nodefactor.grade.12        -0.0584000          0.361864          0.0765335
## nodefactor.sex.2            0.4053485          0.754401          0.4491223
## nodematch.grade.7           0.6797469          0.560716          0.2103441
## nodematch.grade.8           0.3527868          0.269482          0.9214153
## nodematch.grade.9          -0.0238003          0.192588          0.0140224
## nodematch.grade.10          0.2697867          0.279853          0.0647561
## nodematch.grade.11          0.1609803          0.589773          0.1284275
## nodematch.grade.12         -0.0617181          0.247247          0.0656722
## nodematch.sex               0.4466430          0.826281          0.4742009
## nodematch.race.B            0.0385323          0.195478          0.2864583
## nodematch.race.O            0.6442240          0.153014          0.1559877
## nodematch.race.W            0.3161850          0.980688          0.3287476
## degree0                    -0.3332570         -0.436256         -0.2152746
## degree1                    -0.4181252         -0.605884         -0.2674937
## degree2                    -0.2873864         -0.478293         -0.2096022
## degree3                    -0.1652973         -0.356462         -0.1457412
##                     nodefactor.grade.9 nodefactor.grade.10 nodefactor.grade.11
## edges                        0.5930295           0.5938729           0.6733700
## gwesp.fixed.0.1              0.5961513           0.5829731           0.6406508
## absdiff.grade                0.5879181           0.4150145           0.6616388
## nodefactor.race.H            0.2550964           0.3514829           0.1514820
## nodefactor.race.O            0.1284439           0.2699541           0.1350910
## nodefactor.race.W            0.5450017           0.4145818           0.6527448
## nodefactor.grade.8           0.2012900           0.1047373           0.1321555
## nodefactor.grade.9           1.0000000           0.2307075           0.3738857
## nodefactor.grade.10          0.2307075           1.0000000           0.2123111
## nodefactor.grade.11          0.3738857           0.2123111           1.0000000
## nodefactor.grade.12          0.2017232           0.2109727           0.3421486
## nodefactor.sex.2             0.5407644           0.5070184           0.6541551
## nodematch.grade.7            0.0954743           0.1944665           0.2444950
## nodematch.grade.8            0.0693713           0.0230657           0.0710252
## nodematch.grade.9            0.7857052           0.0243342           0.1323932
## nodematch.grade.10           0.0740593           0.9278937           0.0730677
## nodematch.grade.11           0.3002726           0.1402587           0.9335892
## nodematch.grade.12           0.1005290           0.1502588           0.1887892
## nodematch.sex                0.5510795           0.5539353           0.6338422
## nodematch.race.B             0.3672699           0.4882275           0.4089847
## nodematch.race.O            -0.0179282           0.0711361           0.0425362
## nodematch.race.W             0.5221337           0.3623372           0.6557534
## degree0                     -0.2097876          -0.3167183          -0.4109774
## degree1                     -0.2919488          -0.3940804          -0.5619487
## degree2                     -0.2605349          -0.3324188          -0.4047382
## degree3                     -0.2550139          -0.2774747          -0.2836645
##                     nodefactor.grade.12 nodefactor.sex.2 nodematch.grade.7
## edges                        0.49668986         0.885914        0.51073971
## gwesp.fixed.0.1              0.46425792         0.871259        0.49334148
## absdiff.grade                0.54141629         0.758411        0.28607734
## nodefactor.race.H            0.10391400         0.387746        0.27264728
## nodefactor.race.O           -0.05839997         0.405349        0.67974689
## nodefactor.race.W            0.36186369         0.754401        0.56071555
## nodefactor.grade.8           0.07653345         0.449122        0.21034406
## nodefactor.grade.9           0.20172324         0.540764        0.09547431
## nodefactor.grade.10          0.21097269         0.507018        0.19446654
## nodefactor.grade.11          0.34214856         0.654155        0.24449497
## nodefactor.grade.12          1.00000000         0.433037       -0.08304742
## nodefactor.sex.2             0.43303718         1.000000        0.40986095
## nodematch.grade.7           -0.08304742         0.409861        1.00000000
## nodematch.grade.8            0.02545613         0.323995        0.13619960
## nodematch.grade.9            0.00274681         0.214562       -0.07340449
## nodematch.grade.10           0.10636589         0.361817        0.19419355
## nodematch.grade.11           0.23072059         0.573390        0.29840049
## nodematch.grade.12           0.94057612         0.318980       -0.10187178
## nodematch.sex                0.44949142         0.817526        0.48129780
## nodematch.race.B             0.52870536         0.565285        0.00178469
## nodematch.race.O            -0.13047751         0.129941        0.50158134
## nodematch.race.W             0.34218904         0.697254        0.51082116
## degree0                     -0.31133219        -0.494599       -0.43347547
## degree1                     -0.40545680        -0.629176       -0.52476882
## degree2                     -0.32069151        -0.468656       -0.34574928
## degree3                     -0.26105376        -0.360957       -0.17834401
##                     nodematch.grade.8 nodematch.grade.9 nodematch.grade.10
## edges                      0.36918018        0.22932835          0.4481219
## gwesp.fixed.0.1            0.40319299        0.24397249          0.4493866
## absdiff.grade              0.10600371        0.13740885          0.2132589
## nodefactor.race.H          0.23446099        0.11495105          0.3192223
## nodefactor.race.O          0.35278684       -0.02380026          0.2697867
## nodefactor.race.W          0.26948226        0.19258829          0.2798529
## nodefactor.grade.8         0.92141527        0.01402244          0.0647561
## nodefactor.grade.9         0.06937127        0.78570519          0.0740593
## nodefactor.grade.10        0.02306575        0.02433425          0.9278937
## nodefactor.grade.11        0.07102519        0.13239317          0.0730677
## nodefactor.grade.12        0.02545613        0.00274681          0.1063659
## nodefactor.sex.2           0.32399538        0.21456197          0.3618167
## nodematch.grade.7          0.13619960       -0.07340449          0.1941935
## nodematch.grade.8          1.00000000        0.00820935          0.0108240
## nodematch.grade.9          0.00820935        1.00000000         -0.0400632
## nodematch.grade.10         0.01082404       -0.04006316          1.0000000
## nodematch.grade.11         0.07044513        0.10774580          0.0379256
## nodematch.grade.12         0.03586577       -0.03709764          0.0825802
## nodematch.sex              0.33703460        0.20827386          0.4179454
## nodematch.race.B           0.19380146        0.18157582          0.3787870
## nodematch.race.O           0.14488077       -0.02646593          0.0852595
## nodematch.race.W           0.20878633        0.17964441          0.2268827
## degree0                   -0.13426969       -0.00699163         -0.2412800
## degree1                   -0.17299943       -0.04410978         -0.3041413
## degree2                   -0.14888560       -0.06858842         -0.2578410
## degree3                   -0.10515912       -0.12203457         -0.2316935
##                     nodematch.grade.11 nodematch.grade.12 nodematch.sex
## edges                        0.5959074          0.3793231      0.929886
## gwesp.fixed.0.1              0.5689953          0.3554008      0.912600
## absdiff.grade                0.5274709          0.3440549      0.772407
## nodefactor.race.H            0.1236229          0.0855710      0.409044
## nodefactor.race.O            0.1609803         -0.0617181      0.446643
## nodefactor.race.W            0.5897732          0.2472474      0.826281
## nodefactor.grade.8           0.1284275          0.0656722      0.474201
## nodefactor.grade.9           0.3002726          0.1005290      0.551079
## nodefactor.grade.10          0.1402587          0.1502588      0.553935
## nodefactor.grade.11          0.9335892          0.1887892      0.633842
## nodefactor.grade.12          0.2307206          0.9405761      0.449491
## nodefactor.sex.2             0.5733896          0.3189802      0.817526
## nodematch.grade.7            0.2984005         -0.1018718      0.481298
## nodematch.grade.8            0.0704451          0.0358658      0.337035
## nodematch.grade.9            0.1077458         -0.0370976      0.208274
## nodematch.grade.10           0.0379256          0.0825802      0.417945
## nodematch.grade.11           1.0000000          0.1021749      0.565704
## nodematch.grade.12           0.1021749          1.0000000      0.332011
## nodematch.sex                0.5657040          0.3320111      1.000000
## nodematch.race.B             0.3330445          0.4464299      0.541325
## nodematch.race.O             0.0877327         -0.1190353      0.174029
## nodematch.race.W             0.5950707          0.2222166      0.771105
## degree0                     -0.3767468         -0.2501889     -0.521288
## degree1                     -0.5161682         -0.3271763     -0.669323
## degree2                     -0.3690360         -0.2586638     -0.526784
## degree3                     -0.2562135         -0.2149226     -0.391031
##                     nodematch.race.B nodematch.race.O nodematch.race.W
## edges                     0.60652384        0.2011482         0.804074
## gwesp.fixed.0.1           0.57829709        0.1786777         0.802431
## absdiff.grade             0.53854668        0.0509717         0.715294
## nodefactor.race.H         0.08479291        0.1681029         0.221339
## nodefactor.race.O         0.03853232        0.6442240         0.316185
## nodefactor.race.W         0.19547820        0.1530141         0.980688
## nodefactor.grade.8        0.28645830        0.1559877         0.328748
## nodefactor.grade.9        0.36726995       -0.0179282         0.522134
## nodefactor.grade.10       0.48822748        0.0711361         0.362337
## nodefactor.grade.11       0.40898465        0.0425362         0.655753
## nodefactor.grade.12       0.52870536       -0.1304775         0.342189
## nodefactor.sex.2          0.56528548        0.1299405         0.697254
## nodematch.grade.7         0.00178469        0.5015813         0.510821
## nodematch.grade.8         0.19380146        0.1448808         0.208786
## nodematch.grade.9         0.18157582       -0.0264659         0.179644
## nodematch.grade.10        0.37878699        0.0852595         0.226883
## nodematch.grade.11        0.33304452        0.0877327         0.595071
## nodematch.grade.12        0.44642992       -0.1190353         0.222217
## nodematch.sex             0.54132534        0.1740287         0.771105
## nodematch.race.B          1.00000000       -0.0259663         0.155406
## nodematch.race.O         -0.02596628        1.0000000         0.108350
## nodematch.race.W          0.15540601        0.1083500         1.000000
## degree0                  -0.42777006       -0.2065992        -0.391541
## degree1                  -0.48430511       -0.2548138        -0.558664
## degree2                  -0.35284391       -0.1576878        -0.445871
## degree3                  -0.25872169       -0.0440064        -0.335495
##                         degree0    degree1    degree2    degree3
## edges               -0.56998650 -0.7308300 -0.5558115 -0.4122804
## gwesp.fixed.0.1     -0.50599145 -0.6914483 -0.5388248 -0.4052756
## absdiff.grade       -0.47361915 -0.6004357 -0.4550036 -0.3261590
## nodefactor.race.H   -0.21842403 -0.2680109 -0.2078524 -0.1977782
## nodefactor.race.O   -0.33325697 -0.4181252 -0.2873864 -0.1652973
## nodefactor.race.W   -0.43625634 -0.6058843 -0.4782934 -0.3564616
## nodefactor.grade.8  -0.21527456 -0.2674937 -0.2096022 -0.1457412
## nodefactor.grade.9  -0.20978761 -0.2919488 -0.2605349 -0.2550139
## nodefactor.grade.10 -0.31671826 -0.3940804 -0.3324188 -0.2774747
## nodefactor.grade.11 -0.41097741 -0.5619487 -0.4047382 -0.2836645
## nodefactor.grade.12 -0.31133219 -0.4054568 -0.3206915 -0.2610538
## nodefactor.sex.2    -0.49459897 -0.6291760 -0.4686558 -0.3609567
## nodematch.grade.7   -0.43347547 -0.5247688 -0.3457493 -0.1783440
## nodematch.grade.8   -0.13426969 -0.1729994 -0.1488856 -0.1051591
## nodematch.grade.9   -0.00699163 -0.0441098 -0.0685884 -0.1220346
## nodematch.grade.10  -0.24127996 -0.3041413 -0.2578410 -0.2316935
## nodematch.grade.11  -0.37674683 -0.5161682 -0.3690360 -0.2562135
## nodematch.grade.12  -0.25018890 -0.3271763 -0.2586638 -0.2149226
## nodematch.sex       -0.52128773 -0.6693232 -0.5267836 -0.3910311
## nodematch.race.B    -0.42777006 -0.4843051 -0.3528439 -0.2587217
## nodematch.race.O    -0.20659924 -0.2548138 -0.1576878 -0.0440064
## nodematch.race.W    -0.39154068 -0.5586645 -0.4458710 -0.3354949
## degree0              1.00000000  0.3644582  0.2093792  0.1219703
## degree1              0.36445817  1.0000000  0.2955733  0.1947128
## degree2              0.20937923  0.2955733  1.0000000  0.1195232
## degree3              0.12197034  0.1947128  0.1195232  1.0000000
## 
## Sample statistics auto-correlation:
## Chain 1 
##             edges gwesp.fixed.0.1 absdiff.grade nodefactor.race.H
## Lag 0    1.000000        1.000000      1.000000          1.000000
## Lag 1024 0.966013        0.956236      0.901777          0.908486
## Lag 2048 0.937583        0.922101      0.827368          0.832385
## Lag 3072 0.912967        0.894256      0.768607          0.768737
## Lag 4096 0.892434        0.871349      0.723570          0.714128
## Lag 5120 0.872690        0.848806      0.682595          0.666924
##          nodefactor.race.O nodefactor.race.W nodefactor.grade.8
## Lag 0             1.000000          1.000000           1.000000
## Lag 1024          0.940733          0.961340           0.934827
## Lag 2048          0.894070          0.928457           0.877980
## Lag 3072          0.853359          0.898748           0.828667
## Lag 4096          0.817240          0.873208           0.782014
## Lag 5120          0.785860          0.848910           0.741046
##          nodefactor.grade.9 nodefactor.grade.10 nodefactor.grade.11
## Lag 0              1.000000            1.000000            1.000000
## Lag 1024           0.914197            0.954229            0.971846
## Lag 2048           0.849267            0.914213            0.948895
## Lag 3072           0.793603            0.881794            0.930967
## Lag 4096           0.745298            0.853933            0.914008
## Lag 5120           0.698460            0.828131            0.897395
##          nodefactor.grade.12 nodefactor.sex.2 nodematch.grade.7
## Lag 0               1.000000         1.000000          1.000000
## Lag 1024            0.970328         0.954774          0.982914
## Lag 2048            0.944457         0.916876          0.969049
## Lag 3072            0.921743         0.883812          0.957138
## Lag 4096            0.902370         0.855169          0.947228
## Lag 5120            0.884987         0.828248          0.937715
##          nodematch.grade.8 nodematch.grade.9 nodematch.grade.10
## Lag 0             1.000000          1.000000           1.000000
## Lag 1024          0.945543          0.922831           0.960577
## Lag 2048          0.896230          0.860356           0.926472
## Lag 3072          0.852108          0.806524           0.897482
## Lag 4096          0.808940          0.755126           0.870531
## Lag 5120          0.768929          0.706781           0.845600
##          nodematch.grade.11 nodematch.grade.12 nodematch.sex nodematch.race.B
## Lag 0              1.000000           1.000000      1.000000         1.000000
## Lag 1024           0.971473           0.975659      0.956105         0.964117
## Lag 2048           0.949245           0.953121      0.920404         0.935173
## Lag 3072           0.931233           0.933251      0.890433         0.908917
## Lag 4096           0.914831           0.915640      0.866279         0.885230
## Lag 5120           0.900691           0.898205      0.843369         0.863757
##          nodematch.race.O nodematch.race.W  degree0  degree1  degree2  degree3
## Lag 0            1.000000         1.000000 1.000000 1.000000 1.000000 1.000000
## Lag 1024         0.908679         0.957831 0.597717 0.751974 0.491430 0.378856
## Lag 2048         0.838929         0.922294 0.482740 0.695325 0.407028 0.275825
## Lag 3072         0.781822         0.888727 0.438288 0.682968 0.362599 0.259824
## Lag 4096         0.735033         0.858906 0.400148 0.667930 0.350738 0.249302
## Lag 5120         0.695834         0.832413 0.390528 0.651812 0.348449 0.240487
## 
## Sample statistics burn-in diagnostic (Geweke):
## Chain 1 
## 
## Fraction in 1st window = 0.1
## Fraction in 2nd window = 0.5 
## 
##               edges     gwesp.fixed.0.1       absdiff.grade   nodefactor.race.H 
##             1.05523             1.26852             0.58096             2.48108 
##   nodefactor.race.O   nodefactor.race.W  nodefactor.grade.8  nodefactor.grade.9 
##             3.12177             1.89531             1.89452            -0.75043 
## nodefactor.grade.10 nodefactor.grade.11 nodefactor.grade.12    nodefactor.sex.2 
##             1.43600             0.06706             0.48500             1.96516 
##   nodematch.grade.7   nodematch.grade.8   nodematch.grade.9  nodematch.grade.10 
##             2.29870             1.75145            -1.55092             1.92503 
##  nodematch.grade.11  nodematch.grade.12       nodematch.sex    nodematch.race.B 
##            -0.03148             0.71969             1.14709             0.51429 
##    nodematch.race.O    nodematch.race.W             degree0             degree1 
##             1.10348             1.60386            -1.57249            -1.35125 
##             degree2             degree3 
##            -1.02691            -1.36675 
## 
## Individual P-values (lower = worse):
##               edges     gwesp.fixed.0.1       absdiff.grade   nodefactor.race.H 
##           0.2913188           0.2046129           0.5612708           0.0130985 
##   nodefactor.race.O   nodefactor.race.W  nodefactor.grade.8  nodefactor.grade.9 
##           0.0017977           0.0580512           0.0581565           0.4529982 
## nodefactor.grade.10 nodefactor.grade.11 nodefactor.grade.12    nodefactor.sex.2 
##           0.1510018           0.9465325           0.6276728           0.0493959 
##   nodematch.grade.7   nodematch.grade.8   nodematch.grade.9  nodematch.grade.10 
##           0.0215221           0.0798677           0.1209215           0.0542256 
##  nodematch.grade.11  nodematch.grade.12       nodematch.sex    nodematch.race.B 
##           0.9748892           0.4717140           0.2513453           0.6070469 
##    nodematch.race.O    nodematch.race.W             degree0             degree1 
##           0.2698193           0.1087440           0.1158371           0.1766162 
##             degree2             degree3 
##           0.3044607           0.1717024 
## Joint P-value (lower = worse):  0 .

## 
## MCMC diagnostics shown here are from the last round of simulation, prior to computation of final parameter estimates. Because the final estimates are refinements of those used for this simulation run, these diagnostics may understate model performance. To directly assess the performance of the final model on in-model statistics, please use the GOF command: gof(ergmFitObject, GOF=~model).
run_04_ergm <- function() simulate.ergm(dixon_model_04_ergm) %>% intergraph::asIgraph()

dixon_04_lst <- run_network_model_assessment(dixon_igraph, run_04_ergm, n_iter = 1000)

plot(dixon_04_lst$assess_plot)

summary(dixon_model_04_ergm)
## 
## ==========================
## Summary of model fit
## ==========================
## 
## Formula:   dixon_network ~ edges + gwesp(0.1, fixed = TRUE) + absdiff("grade") + 
##     nodefactor("race") + nodefactor("grade") + nodefactor("sex") + 
##     nodematch("grade", diff = TRUE) + nodematch("sex", diff = FALSE) + 
##     nodematch("race", diff = TRUE) + degree(0:3)
## 
## Iterations:  14 out of 20 
## 
## Monte Carlo MLE Results:
##                     Estimate Std. Error MCMC % p-value    
## edges                -6.3068     0.3867      0  <1e-04 ***
## gwesp.fixed.0.1       0.9159     0.0744      0  <1e-04 ***
## absdiff.grade        -0.4004     0.0640      0  <1e-04 ***
## nodefactor.race.H     1.2617     0.1310      0  <1e-04 ***
## nodefactor.race.O     1.4310     0.1431      0  <1e-04 ***
## nodefactor.race.W     0.2409     0.1548      0  0.1197    
## nodefactor.grade.8    0.0678     0.1752      0  0.6989    
## nodefactor.grade.9    0.6988     0.1665      0  <1e-04 ***
## nodefactor.grade.10   0.0149     0.1560      0  0.9238    
## nodefactor.grade.11   0.3463     0.1578      0  0.0282 *  
## nodefactor.grade.12   0.4248     0.1610      0  0.0083 ** 
## nodefactor.sex.2      0.0428     0.0305      0  0.1599    
## nodematch.grade.7     1.7274     0.3532      0  <1e-04 ***
## nodematch.grade.8     1.5206     0.2079      0  <1e-04 ***
## nodematch.grade.9     0.1176     0.1968      0  0.5500    
## nodematch.grade.10    1.5206     0.1943      0  <1e-04 ***
## nodematch.grade.11    0.7397     0.2687      0  0.0059 ** 
## nodematch.grade.12    0.9323     0.3071      0  0.0024 ** 
## nodematch.sex         0.2693     0.0648      0  <1e-04 ***
## nodematch.race.B      2.1802     0.1881      0  <1e-04 ***
## nodematch.race.H        -Inf     0.0000      0  <1e-04 ***
## nodematch.race.O     -1.3140     0.5733      0  0.0219 *  
## nodematch.race.W      1.4872     0.1944      0  <1e-04 ***
## degree0               2.1835     0.4974      0  <1e-04 ***
## degree1               2.0597     0.3736      0  <1e-04 ***
## degree2               1.0961     0.3553      0  0.0020 ** 
## degree3               0.4419     0.3506      0  0.2076    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##      Null Deviance: 42459  on 30628  degrees of freedom
##  Residual Deviance:   NaN  on 30601  degrees of freedom
##  
## AIC: NaN    BIC: NaN    (Smaller is better.) 
## 
##  Warning: The following terms have infinite coefficient estimates:
##   nodematch.race.H

4 R Environment

devtools::session_info()
## Session info ------------------------------------------------------------------
##  setting  value                       
##  version  R version 3.5.0 (2018-04-23)
##  system   x86_64, linux-gnu           
##  ui       RStudio (1.1.423)           
##  language en_GB:en                    
##  collate  en_GB.UTF-8                 
##  tz       Europe/Dublin               
##  date     2018-05-21
## Packages ----------------------------------------------------------------------
##  package        * version  date       source        
##  assertthat       0.2.0    2017-04-11 CRAN (R 3.5.0)
##  backports        1.1.2    2017-12-13 CRAN (R 3.5.0)
##  base           * 3.5.0    2018-04-28 local         
##  bindr            0.1.1    2018-03-13 CRAN (R 3.5.0)
##  bindrcpp       * 0.2.2    2018-03-29 CRAN (R 3.5.0)
##  broom            0.4.4    2018-03-29 CRAN (R 3.5.0)
##  cellranger       1.1.0    2016-07-27 CRAN (R 3.5.0)
##  cli              1.0.0    2017-11-05 CRAN (R 3.5.0)
##  coda             0.19-1   2016-12-08 CRAN (R 3.5.0)
##  colorspace       1.3-2    2016-12-14 CRAN (R 3.5.0)
##  compiler         3.5.0    2018-04-28 local         
##  cowplot        * 0.9.2    2017-12-17 CRAN (R 3.5.0)
##  crayon           1.3.4    2017-09-16 CRAN (R 3.5.0)
##  datasets       * 3.5.0    2018-04-28 local         
##  DEoptimR         1.0-8    2016-11-19 CRAN (R 3.5.0)
##  devtools       * 1.13.5   2018-02-18 CRAN (R 3.5.0)
##  digest           0.6.15   2018-01-28 CRAN (R 3.5.0)
##  dplyr          * 0.7.5    2018-05-19 CRAN (R 3.5.0)
##  ergm           * 3.8.0    2017-08-20 CRAN (R 3.5.0)
##  evaluate         0.10.1   2017-06-24 CRAN (R 3.5.0)
##  forcats        * 0.3.0    2018-02-19 CRAN (R 3.5.0)
##  foreign          0.8-70   2018-04-23 CRAN (R 3.5.0)
##  fortunes         1.5-4    2016-12-29 CRAN (R 3.5.0)
##  ggnetwork      * 0.5.1    2016-03-25 CRAN (R 3.5.0)
##  ggplot2        * 2.2.1    2016-12-30 CRAN (R 3.5.0)
##  ggrepel          0.8.0    2018-05-09 CRAN (R 3.5.0)
##  glue             1.2.0    2017-10-29 CRAN (R 3.5.0)
##  graphics       * 3.5.0    2018-04-28 local         
##  grDevices      * 3.5.0    2018-04-28 local         
##  grid             3.5.0    2018-04-28 local         
##  gtable           0.2.0    2016-02-26 CRAN (R 3.5.0)
##  haven            1.1.1    2018-01-18 CRAN (R 3.5.0)
##  hms              0.4.2    2018-03-10 CRAN (R 3.5.0)
##  htmltools        0.3.6    2017-04-28 CRAN (R 3.5.0)
##  httr             1.3.1    2017-08-20 CRAN (R 3.5.0)
##  igraph         * 1.2.1    2018-03-10 CRAN (R 3.5.0)
##  igraphdata     * 1.0.1    2015-07-13 CRAN (R 3.5.0)
##  intergraph     * 2.0-2    2016-12-05 CRAN (R 3.5.0)
##  jsonlite         1.5      2017-06-01 CRAN (R 3.5.0)
##  knitr            1.20     2018-02-20 CRAN (R 3.5.0)
##  labeling         0.3      2014-08-23 CRAN (R 3.5.0)
##  lattice          0.20-35  2017-03-25 CRAN (R 3.5.0)
##  latticeExtra     0.6-28   2016-02-09 CRAN (R 3.5.0)
##  lazyeval         0.2.1    2017-10-29 CRAN (R 3.5.0)
##  lpSolve          5.6.13   2015-09-19 CRAN (R 3.5.0)
##  lubridate        1.7.4    2018-04-11 CRAN (R 3.5.0)
##  magrittr         1.5      2014-11-22 CRAN (R 3.5.0)
##  MASS             7.3-50   2018-04-30 CRAN (R 3.5.0)
##  Matrix           1.2-14   2018-04-09 CRAN (R 3.5.0)
##  memoise          1.1.0    2017-04-21 CRAN (R 3.5.0)
##  methods        * 3.5.0    2018-04-28 local         
##  mnormt           1.5-5    2016-10-15 CRAN (R 3.5.0)
##  modelr           0.1.2    2018-05-11 CRAN (R 3.5.0)
##  munsell          0.4.3    2016-02-13 CRAN (R 3.5.0)
##  network        * 1.13.0.1 2018-04-02 CRAN (R 3.5.0)
##  nlme             3.1-137  2018-04-07 CRAN (R 3.5.0)
##  parallel         3.5.0    2018-04-28 local         
##  pillar           1.2.2    2018-04-26 CRAN (R 3.5.0)
##  pkgconfig        2.0.1    2017-03-21 CRAN (R 3.5.0)
##  plyr             1.8.4    2016-06-08 CRAN (R 3.5.0)
##  psych            1.8.4    2018-05-06 CRAN (R 3.5.0)
##  purrr          * 0.2.4    2017-10-18 CRAN (R 3.5.0)
##  R6               2.2.2    2017-06-17 CRAN (R 3.5.0)
##  RColorBrewer     1.1-2    2014-12-07 CRAN (R 3.5.0)
##  Rcpp             0.12.17  2018-05-18 CRAN (R 3.5.0)
##  readr          * 1.1.1    2017-05-16 CRAN (R 3.5.0)
##  readxl           1.1.0    2018-04-20 CRAN (R 3.5.0)
##  reshape2         1.4.3    2017-12-11 CRAN (R 3.5.0)
##  rlang            0.2.0    2018-02-20 CRAN (R 3.5.0)
##  rmarkdown        1.9      2018-03-01 CRAN (R 3.5.0)
##  robustbase       0.93-0   2018-04-24 CRAN (R 3.5.0)
##  rprojroot        1.3-2    2018-01-03 CRAN (R 3.5.0)
##  rstudioapi       0.7      2017-09-07 CRAN (R 3.5.0)
##  rvest            0.3.2    2016-06-17 CRAN (R 3.5.0)
##  sand           * 1.0.3    2017-03-02 CRAN (R 3.5.0)
##  scales         * 0.5.0    2017-08-24 CRAN (R 3.5.0)
##  sna            * 2.4      2016-08-08 CRAN (R 3.5.0)
##  statnet.common * 4.0.0    2017-08-16 CRAN (R 3.5.0)
##  stats          * 3.5.0    2018-04-28 local         
##  stringi          1.2.2    2018-05-02 CRAN (R 3.5.0)
##  stringr        * 1.3.1    2018-05-10 CRAN (R 3.5.0)
##  tibble         * 1.4.2    2018-01-22 CRAN (R 3.5.0)
##  tidyr          * 0.8.1    2018-05-18 CRAN (R 3.5.0)
##  tidyselect       0.2.4    2018-02-26 CRAN (R 3.5.0)
##  tidyverse      * 1.2.1    2017-11-14 CRAN (R 3.5.0)
##  tools            3.5.0    2018-04-28 local         
##  trust            0.1-7    2015-07-04 CRAN (R 3.5.0)
##  utils          * 3.5.0    2018-04-28 local         
##  withr            2.1.2    2018-03-15 CRAN (R 3.5.0)
##  xml2             1.2.0    2018-01-24 CRAN (R 3.5.0)
##  yaml             2.1.19   2018-05-01 CRAN (R 3.5.0)